#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
using namespace std;

template <typename T>
class Stack
{
	T* arr;	// 存储空间首地址
	int top;	// 栈顶
	const int cal;	//容量
public:
	Stack(int cal=1):cal(cal) 
	{
		arr = new T[cal];
		top = -1;
	}

	~Stack(void)
	{
		delete[] arr;
	}
	bool full(void)
	{
		return (top >= cal);
	}
	bool empty(void)
	{
		return top < 0;
	}
	bool push(T data)
	{
		if(full()) return false;
		arr[++top] = data;
		return true;
	}
	void pop(void)
	{
		top--;
	}
	T top1(void)
	{
		return arr[top];
	}
	int size(void)
	{
		return top+1;
	}
};

int main()
{
	Stack<int> s(20);
	for(int i=0; i<10; i++)
	{
		s.push(i);
		cout << s.top1() << endl;
	}
	while(!s.empty())
	{
		cout << s.top1() << endl;
		s.pop();
	}
}